package com.camps.sdk.encrypt;

import com.camps.sdk.common.ExceptionCode;
import com.camps.sdk.exception.BaseException;
import com.camps.sdk.utils.EncryptionAndDecryptionUtils;

/**
 * @Author ldaoliang
 * @Date create in 9:38 2021/9/1
 * @Description
 */
public interface BuildCommand {

    /**
     * 抽象方法，实际等待各个实现类处理
     * @param imei
     * @param params
     * @return
     */
    String splicingParameters(String imei,Object params);

    /**
     * 定义模板方法
     * @param imei
     * @param cmd
     * @param params
     * @return
     */
    static String generateCommand(String imei,String cmd,Object params){
        // 1.选择对应的处理类
        BuildCommand buildCommand = ParameterBuilderFactory.createBuildCommand(cmd);
        if(buildCommand == null){
            throw new BaseException(ExceptionCode.CMD_ERROR);
        }
        // 2.根据对应处理类，拿到参数处理
        String originParam = buildCommand.splicingParameters(imei, params);
        // 3.加密
        String encryptData = null;
        try{
            encryptData = EncryptionAndDecryptionUtils.encrypt(originParam);
        }catch (Exception e){
            throw new BaseException(ExceptionCode.ENCRYPT_ERROR);
        }
        // 4.返回
        return encryptData.concat("@@");
    }



}
